精通数据抓取、爬虫。网易 - 字节 - 红杉中国。 微软 MVP。 出版了《Python爬虫开发 从入门到实战》。
1970-01-01 08:00:00
利益不相关声明,今天介绍的所有工具,都跟我没有任何软文合作,也没有金钱往来。我在这篇文章里面对他们做介绍仅仅是因为他们对我确实非常有用。
最近几个月,国产大模型相继推出了自己的 App,这些 App 不仅可进行 AI 对话,还能提供各种智能工具。谈论AI对话功能的文章太多了,我就不赘述了。今天聊聊他们的其他功能。不可否认,国产大模型比国外的大模型差了不少,但我一向秉持重器轻用的观点,我不管这些App提供了多少功能,我只看它里面有没有功能适合我,即便它提供了100个功能,我可能只会使用它其中一个适合我的功能。
1970-01-01 08:00:00
最近大家都在说LLama3如何如何强大,追赶Claude3,超过GPT 4。但如果大家真的使用过,就会发现它连基本的中文都回答不好。如下图所示:
LLama3总是尽可能回复英文,并且还会加很多表情符号。
1970-01-01 08:00:00
在《一日一技:自动提取任意信息的通用爬虫》这篇文章中,我提到可以通过大模型从网页内容里面提取结构化信息。为了节省Token,文章里面我直接提取了页面上的所有文本。
1970-01-01 08:00:00
如果你使用macOS,想看上面某个软件使用什么技术开发的。那么你可以使用这个方法。它对普通人来说可能没什么用。如果你本来就做macOS软件开发,那么这个方法可能会很有用。
首先,我们知道macOS上面,安装的软件一般都放在/Applications/
或者~/Applications
文件夹里面。这里我以阿里网盘为例。
1970-01-01 08:00:00
当你要自己发布一个Python包时,下面这两个小技巧可能对你有用。
今天公众号粉丝群里面,有同学提问:
这个同学自己开发了一个Python包,这个包在使用pip安装时,会产生一些临时文件。他希望安装完成以后,能够自动清理这些临时文件。
1970-01-01 08:00:00
我最近在使用一个第三方库,叫做RapidFuzz
。它有一个工具函数,叫做utils.default_process
,在官方文档里面,是这样介绍的:
红色方框里面说,这个函数可以移除所有的非alphanumeric
字符。如果我们使用翻译软件,会发现alphanumeric
的意思是字母和数字。如下图所示:
因此,我想当然的觉得,这个功能函数,只会保留26个英文字母的大小写加上10个数字,一共62个字符。把除此之外的所有其他字符都移除掉。
1970-01-01 08:00:00
我三年前写过一篇文章:《小问题大隐患:如何正确设置 Python 项目的入口文件?》。讲到Python项目应该如何正确组织代码结构。入口文件应该在最外面,调用关系应该是从外向内调用。而不要学Java,从一个很深层的文件夹里面往外调用。
不过我在这篇文章的最后,也提到了一种例外情况,那就是工具脚本不受这个规则的限制。如下图所示。
1970-01-01 08:00:00
经过一年多的发展,各种开源大模型现在已经相当不错了。国产的Qwen 1.5的生成效果已经能满足一些日常使用。
有一些同学可能之前一直在用网页版的ChatGPT、Kimi Chat、文心一言或者通义千问,那么你可能会遇到如下一些问题:
当你被这些问题困扰,那么你可以考虑离线运行开源大模型。完全不需要网络,因此不存在隐私泄漏的问题。你可以随意对模型进行微调,想弄成猫娘还是伪娘都随你的想法。没有任何审查,想怎么问怎么答都可以调整。
1970-01-01 08:00:00
我们在部署代码到线上以后,可能会需要在一些情况下给自己发报警通知。如果是公司的线上业务,一般会有公司内部的各种通知工具。
但如果是自己的个人服务,我们应该怎么推送消息呢?有些同学可能使用过叮叮或者飞书机器人,但是这些机器人要发送通知还需要拉个群,稍微有点麻烦。有些同学可能使用的是Telegram,但使用它需要梯子也不太方便。
如果你的手机是iPhone,那么你可以使用一个开源免费超级轻量级的消息推送服务:Bark.
1970-01-01 08:00:00
我以前一直使用Vue来写前端。去年下半年接手了一个基于React + Next.js的项目,于是顺带学习了一下Next.js。由于Next.js的特点,这个项目的前后端是放在一起的。一开始没什么问题,看了半天文档就上手了。
上周我们需要在另一个网页项目中,调用这个项目的后端接口,于是就需要处理跨域请求的问题。但我发现按照网上的方法,跨域问题依然存在。这个问题浪费了我不少时间,好在最后终于找到了原因。记录在这里,免得大家跟我一样踩坑。
1970-01-01 08:00:00
跟风来写个年终总结。
我记得在2023年元旦,我发了个语音,说我要开始搞播客。结果1年过去了,播客还是没个影子。今年不设这个目标了,免得又拖到明年。
2023年开头的前5个月,是2022年痛苦的延续。我真的太讨厌字节了。每一天都过得非常痛苦。公众号没有时间写,自己的代码也没有时间写,连学习的时间都没有。每天下班就只想躺下。连躺下都躺不安稳,飞书上面的消息一直在轰炸,动不动就开语音。开你妈个锤子的语音。急急急,急你MLGB,你连一小时都活不下去了吗?我每天在心里骂字节和某些没有边界的同事一百遍。
1970-01-01 08:00:00
上周的公众号文章提到了Bright Data提供的代理服务。没想到他们的运营同学竟然找上了门,问我能不能帮他们做一个评测。
我之前使用Bright Data的代理,是因为突然有一天我的HuggingFace爬虫挂了。比较奇怪的是,这个爬虫在我电脑上始终正常运行,但一放到服务器上就请求失败。联想到HuggingFace被封了,而这个爬虫之前一直使用的国内代理供应商,那么原因就很明显了。因为我的电脑是24小时挂着梯子的,所以能够正常访问HuggineFace,但爬虫部署到服务器上面以后,他会自动使用配置好的国内代理。由于国内代理也受到GFW的影响,因此也会出问题。
1970-01-01 08:00:00
使用过GNE的同学都知道,GNE虽然是通用爬虫,但只是文章类页面的通用爬虫。如果一个页面不是文章页,那么就无能为力了。
随着ChatGPT引领的大语言模型时代到来,这个问题基本上已经不是问题了。我们先来看一个效果。首先打开Linkedin,随便找一个招聘的岗位,如下图所示:
然后,我们直接使用GPT从这里提取信息:
1970-01-01 08:00:00
GnePro是开源项目GNE的付费版,能够实现如下功能:
1970-01-01 08:00:00
经常关注未闻Code的同学都知道,我做了一个叫做GNE的开源项目,它能够自动提取新闻类网页的正文。效果远远好于市面上其他的开源新闻提取工具。
大家可能不知道,GNE还有一个高级版,叫做GnePro。它可以让你输入URL就自动提取新闻的正文,提取的字段比GNE多得多。并且已经在8个国家13万个网站上做过测试,识别准确率100%。
1970-01-01 08:00:00
当我们在维护公司项目时,可能会遇到这样的场景:我正在开发一个新功能,突然需要修一个Bug。
这个时候,有些同学是这样做的:
1 | git add . |
更有一些经验的同学,可能会这样写:
1 | git stash |
但如果在修这个Bug的时候,又来了一个更紧急的Bug需要修怎么办?到后面很容易就把前面的代码搞忘了。
1970-01-01 08:00:00
在之前的多篇文章中,我都反复告诫大家,不要滥用字典来传大量数据。因为当你的函数收到一个字典的时候,你根本不知道这个字典里面有哪些Key,你必须有一层一层往上看,找到所有尝试往字典里面添加新Key的地方,你才能知道它总共有哪些Key。
但是,在正常公司项目中,我们可能会需要维护一些历史遗留代码。代码规模大,函数调用层级非常深。并且之前的人已经使用字典来传递了大量的数据。
短时间内,我们没有办法直接把字典改成Dataclass。那么我们能做的,就是尽量避免后续的维护者往里面加入新的Key。我以前遇到过一个项目,它有一个字典,刚刚开始初始化的时候,只有5个Key。这个字典作为参数被传入了很多个函数,每个函数都会往它里面加很多个Key。到最后,这个字典里面已经有40多个Key了。
1970-01-01 08:00:00
前两天的OpenAI发布会,相信很多同学看完以后都热血沸腾。我之前一直使用的是ChatGPT的免费版本,看完这个发布会以后,立刻就充值了ChatGPT Plus,来试一试这些高级功能。
这两天GPTs功能上线了,短短三天时间,全球网友创建了几千个GPT机器人。我今天也来搞一个玩玩。
使用GPTs创建机器人非常简单,不需要懂任何编程知识,甚至不需要懂Prompt工程,你只需要跟着他的向导,一步一步描述你的想法就可以了。
1970-01-01 08:00:00
写后端的同学,有时候需要在网站上实现一个功能,让用户上传或者编写自己的Python代码。后端再运行这些代码。
涉及到用户自己上传代码,我们第一个想到的问题,就是如何避免用户编写危险命令。如果用户的代码里面涉及到下面两行,在不做任何安全过滤的情况下,就会导致服务器的Home文件夹被清空。
1 | import os |
有人想的比较简单,直接判断用户的代码里面有没有os.system
、exec
、subprocess
……这些危险关键词不就可以了吗?
这种想法乍看起来没有问题,但细想下,就会发现非常天真。如果用户的代码像下面这样写,你又要如何应对?
1970-01-01 08:00:00
我们在开发爬虫的过程中,经常发现有一些网站,会直接把数据放到HTML中的<script>
标签里面。这些数据长得有点像JSON,但又有差异,如下图所示:
这种格式,我们叫做JavaScript Object。长得很像Python的字典,又很像是JSON。但是这个格式在Python里面,无论直接当字典解析,还是当JSON解析,都会报错,如下图所示:
遇到这种情况,有同学准备使用正则表达式来解析,又有同学直接放弃。